﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmCarrosNaOficina : Form
    {
        #region Variaveis
        DataTable dataTableGridView = new DataTable();
        List<DTOOrdemPendente> ListOrdemPendente = new List<DTOOrdemPendente>();

        DTOCliente dtoCliente = new DTOCliente();
        DTOOrdemPendente dtoOrdemPendente = new DTOOrdemPendente();
        DTOOrdemDetalheServico dtoOrdemDetalheServico = new DTOOrdemDetalheServico();
        DTOOrdemDetalheProduto dtoOrdemDetalheProduto = new DTOOrdemDetalheProduto();
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();

        BLLOrdemPendente bllOrdemPendente = new BLLOrdemPendente();
        BLLCliente bllCliente = new BLLCliente();
        BLLCor bllCor = new BLLCor();

        
        

        #endregion

        #region Metodos
        public frmCarrosNaOficina()
        {
            InitializeComponent();
            PopulaGrid();
            SetColors();
            Habilitar(false);
            this.WindowState = FormWindowState.Maximized;
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");

            btnConcluirServico.BackColor = btnConcluir.BackColor = btnReziseVeiculo.BackColor = tlpVeiculo.BackColor =
                lbl1.BackColor = btn_pesquisar.BackColor = btnEditarServico.BackColor = tlpMenuStripLeft.BackColor =  btnSair.BackColor =
                btnAddProduto.BackColor = btnBuscarVeiculo.BackColor = btnCancelar.BackColor = btnEditar.BackColor = tlpMenuStripRigth.BackColor =
                btnEditarProduto.BackColor = btnExcluirProduto.BackColor = btnExpandir.BackColor = btnNovo.BackColor =
                btnRetirar.BackColor = btnSalvar.BackColor = tlp_dados.BackColor = tlpCrud.BackColor = tlpDetalhesInterno.BackColor =
                tlpMenuStripCenter.BackColor = tlpPesquisa.BackColor = btnAdiconarServico.BackColor = btnExcluirServico.BackColor = dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpMenuStrip.BackColor = tlpPrincipal.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dgvOrdemPendente.BackgroundColor = dgvProdutos.BackgroundColor = dgvServicos.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            btnConcluirServico.ForeColor = btnConcluir.ForeColor = label2.ForeColor = label3.ForeColor =
                label4.ForeColor = label5.ForeColor = label6.ForeColor = label7.ForeColor =
                lbl1.ForeColor = lbl3.ForeColor = lbl4.ForeColor = lbl5.ForeColor = lbl7.ForeColor = lbl8.ForeColor =
                ckb_exibirPendentes.ForeColor = ckb_exibirConcluidos.ForeColor = btnAddProduto.ForeColor = btnBuscarVeiculo.ForeColor =
                btnCancelar.ForeColor = btnEditar.ForeColor = btnEditarProduto.ForeColor = btnExcluirProduto.ForeColor =
                btnExpandir.ForeColor = btnNovo.ForeColor = btnRetirar.ForeColor = btnSalvar.ForeColor = btnAdiconarServico.ForeColor = btnExcluirServico.ForeColor =
                btnEditarServico.ForeColor = dtoCorLetra.Cor;
        }

        public void Limpar()
        {
            txtTotal.Clear();
            txtResumo.Clear();
            txtVeiculo.Clear();
            txtDescricao.Clear();
            txtPesquisar.Clear();
            txtVeiculoID.Clear();
            txtVeiculoDono.Clear();
            txtveiculoPlaca.Clear();
            gpbVeiculo.Text = "Ordem";
            txtSubTotalProduto.Clear();
            txtSubTotalServicos.Clear();
            txtSubTotalServicos.Clear(); ;
            dgvProdutos.DataSource = null;
            dgvServicos.DataSource = null;
            cmbPrioridade.SelectedIndex = 0;
            dtpDataEntrada.Value = DateTime.Now;
            dtpPrevisaoEntrega.Value = DateTime.Now;
        }

        public void Habilitar(bool status)
        {
            tlp_dados.Enabled = status;
            btnExpandir.Enabled = status;
            btnNovo.Enabled = !status;
            btnEditar.Enabled = !status;
            btnConcluir.Enabled = !status;
            btnRetirar.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;

            if (dgvOrdemPendente.Rows.Count <= 0)
            {
                btnEditar.Enabled = false;
                btnConcluir.Enabled = false;
                btnRetirar.Enabled = false;
            }
            if (!status)
            {
                tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 280F));
                tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
                tlpDetalhesInterno.Visible = false;
            }
        }

        public void PopulaGrid()
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();
            if (ckb_exibirPendentes.Checked && ckb_exibirConcluidos.Checked)
                ListOrdemPendente = bllOrdemPendente.BuscarOrdemPendente();
            else if (ckb_exibirPendentes.Checked)
                ListOrdemPendente = bllOrdemPendente.BuscarOrdemPendentePendentes();
            else if (ckb_exibirConcluidos.Checked)
                ListOrdemPendente = bllOrdemPendente.BuscarOrdemPendenteConcluidas();
            else
                ListOrdemPendente = new List<DTOOrdemPendente>();

            if (ListOrdemPendente.Count > 0)
            {
                dataTableGridView.Columns.Add("ID", typeof(int));
                dataTableGridView.Columns.Add("Veiculo", typeof(string));
                dataTableGridView.Columns.Add("Placa", typeof(string));
                dataTableGridView.Columns.Add("Dono", typeof(string));
                dataTableGridView.Columns.Add("Entrada", typeof(DateTime));
                dataTableGridView.Columns.Add("Previsão Entrega", typeof(DateTime));
                dataTableGridView.Columns.Add("Status", typeof(string));


                foreach (DTOOrdemPendente dtoOrdemPendente in ListOrdemPendente)
                {
                    dataRow = dataTableGridView.NewRow();

                    dataRow["ID"] = dtoOrdemPendente.OrdemPendenteID;
                    dataRow["Veiculo"] = dtoOrdemPendente.Veiculo;
                    dataRow["Placa"] = dtoOrdemPendente.Placa;
                    dataRow["Dono"] = dtoOrdemPendente.Dono;
                    dataRow["Entrada"] = (dtoOrdemPendente.DataEntrada.Date);
                    dataRow["Previsão Entrega"] = (dtoOrdemPendente.PrevisaoEntrega.Date);
                    switch (dtoOrdemPendente.Status)
                    {
                        case false: dataRow["Status"] = "Pendente"; break;
                        case true: dataRow["Status"] = "Concluído"; break;
                    }

                    dataTableGridView.Rows.Add(dataRow);
                }
            }
            dgvOrdemPendente.DataSource = null;
            dgvOrdemPendente.DataSource = dataTableGridView;

        }

        public void PopulaGrid(string descricao)
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();

            ListOrdemPendente = bllOrdemPendente.BuscarOrdemPendentePesquisa(descricao);
            if (ListOrdemPendente.Count > 0)
            {
                dataTableGridView.Columns.Add("ID", typeof(int));
                dataTableGridView.Columns.Add("Veiculo", typeof(string));
                dataTableGridView.Columns.Add("Placa", typeof(string));
                dataTableGridView.Columns.Add("Dono", typeof(string));
                dataTableGridView.Columns.Add("Entrada", typeof(DateTime));
                dataTableGridView.Columns.Add("Previsão Entrega", typeof(DateTime));
                dataTableGridView.Columns.Add("Status", typeof(string));


                foreach (DTOOrdemPendente dtoOrdemPendente in ListOrdemPendente)
                {
                    dataRow = dataTableGridView.NewRow();

                    dataRow["ID"] = dtoOrdemPendente.OrdemPendenteID;
                    dataRow["Veiculo"] = dtoOrdemPendente.Veiculo;
                    dataRow["Placa"] = dtoOrdemPendente.Placa;
                    dataRow["Dono"] = dtoOrdemPendente.Dono;
                    dataRow["Entrada"] = (dtoOrdemPendente.DataEntrada.Date);
                    dataRow["Previsão Entrega"] = (dtoOrdemPendente.PrevisaoEntrega.Date);
                    switch (dtoOrdemPendente.Status)
                    {
                        case false: dataRow["Status"] = "Pendente"; break;
                        case true: dataRow["Status"] = "Concluído"; break;
                    }

                    dataTableGridView.Rows.Add(dataRow);
                }
            }
            dgvOrdemPendente.DataSource = null;
            dgvOrdemPendente.DataSource = dataTableGridView;

        }

        public void PopularGridProdutos()
        {
            double subTotalServico = 0, subTotalProduto = 0;
            double total = 0;

            dgvProdutos.DataSource = new BLLProduto().BuscarProdutosOrdem(dtoOrdemPendente.OrdemPendenteID);
            if (dgvProdutos.Rows.Count > 0)
            {
                dgvProdutos.Columns[0].Visible = false;
                for (int i = 0; i < dgvProdutos.RowCount; i++)
                    total += double.Parse(dgvProdutos["Total", i].Value.ToString());
            }
            txtSubTotalProduto.Text = string.Format("R$ {0:0.00}", total);
            if (txtSubTotalProduto.Text != "")
                subTotalProduto = double.Parse((txtSubTotalProduto.Text.Replace("R", "").Replace("$", "")).ToString());
            if (txtSubTotalServicos.Text != "")
                subTotalServico = double.Parse((txtSubTotalServicos.Text.Replace("R", "").Replace("$", "")).ToString());
            txtTotal.Text = string.Format("R$ {0:0.00}", subTotalProduto + subTotalServico);

        }

        public void PopularGridServicos()
        {
            double subTotalServico = 0, subTotalProduto = 0;
            double total = 0;

            dgvServicos.DataSource = new BLLServico().BuscarServicosOrdem(dtoOrdemPendente.OrdemPendenteID);
            if (dgvServicos.Rows.Count > 0)
            {
                dgvServicos.Columns[0].Visible = false;
                for (int i = 0; i < dgvServicos.RowCount; i++)
                {
                    total += double.Parse(dgvServicos["Valor", i].Value.ToString());
                }
            }
            txtSubTotalServicos.Text = string.Format("R$ {0:0.00}", total);
            if (txtSubTotalProduto.Text != "")
                subTotalProduto = double.Parse((txtSubTotalProduto.Text.Replace("R", "").Replace("$", "")).ToString());
            if (txtSubTotalServicos.Text != "")
                subTotalServico = double.Parse((txtSubTotalServicos.Text.Replace("R", "").Replace("$", "")).ToString());
            txtTotal.Text = string.Format("R$ {0:0.00}", subTotalProduto + subTotalServico);

        }
        #endregion

        #region Eventos

        #region Click
        private void btnExpandir_Click(object sender, EventArgs e)
        {
            if (tlpPrincipal.RowStyles[2].Height == 280)
            {
                tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
                tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 0F));
                tlpDetalhesInterno.Visible = true;
            }
            else
            {
                tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 280F));
                tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
                tlpDetalhesInterno.Visible = false;
            }
        }
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            dtoOrdemPendente.Descricao = txtDescricao.Text;
            if (!string.IsNullOrWhiteSpace(txtVeiculoID.Text))
                dtoOrdemPendente.VeiculoID = Int32.Parse(txtVeiculoID.Text);
            dtoOrdemPendente.DataEntrada = dtpDataEntrada.Value;
            dtoOrdemPendente.PrevisaoEntrega = dtpPrevisaoEntrega.Value;
            dtoOrdemPendente.Prioridade = cmbPrioridade.SelectedItem.ToString();
            dtoOrdemPendente.Resumo = txtResumo.Text;
            dtoOrdemPendente.Status = false;

            if (dtoOrdemPendente.VeiculoID != 0)
            {
                if (dtoOrdemPendente.OrdemPendenteID != 0)
                {
                    bllOrdemPendente.Atualizar(dtoOrdemPendente);
                    PopulaGrid();
                    Limpar();
                    Habilitar(false);
                }
                else
                {
                    bllOrdemPendente.Inserir(dtoOrdemPendente);
                    PopulaGrid();
                    dtoOrdemPendente.OrdemPendenteID = Int32.Parse(dgvOrdemPendente.Rows[dgvOrdemPendente.RowCount - 1].Cells["ID"].Value.ToString());
                    gpbVeiculo.Text = "Ordem Nº: " + dtoOrdemPendente.OrdemPendenteID;
                    Habilitar(true);
                }
            }
        }
        private void btnExcluir_Click(object sender, EventArgs e)
        {

        Retirar:
            if (dgvOrdemPendente.Rows[dgvOrdemPendente.CurrentCellAddress.Y].Cells["Status"].Value.ToString() == "Concluído")
            {
                dgvOrdemPendente_CellClick(null, null);
                if (dtoOrdemPendente.OrdemPendenteID != 0)
                    if (new frmMessageBox().Show("Confirma a Remoção do veículo placa: " + txtveiculoPlaca.Text + " da Oficina?", "Aviso", MessageBoxButtons.YesNoCancel) == System.Windows.Forms.DialogResult.Yes)
                    {
                        dgvOrdemPendente_CellClick(null, null);
                        new frmVenda(dtoOrdemPendente).ShowDialog();
                        //Criar Ordem de Saida
                        //alterar o ordemId (ordemdetalheServicoID, ordemdetalheProdutoID)
                        Limpar();
                        Habilitar(false);
                        PopulaGrid();
                        dgvOrdemPendente_CellClick(null, null);
                    }
            }
            else
            {
                if (new frmMessageBox().Show(string.Format("O Veículo de Placa {0} está definido como Pendente.\n\nDeseja Definí-lo como Concluído?", txtveiculoPlaca.Text), "Serviços Pendentes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
                {
                    btnConcluir_Click(null, null);
                    if (dgvOrdemPendente.Rows[dgvOrdemPendente.CurrentCellAddress.Y].Cells["Status"].Value.ToString() == "Concluído")
                        goto Retirar;
                }
            }
        }
        private void btnEditar_Click(object sender, EventArgs e)
        {
            dgvOrdemPendente_CellClick(null, null);

            tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 280F));
            tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            tlpDetalhesInterno.Visible = false;
            dgvOrdemPendente_CellClick(null, null);
            Habilitar(true);
            btnBuscarVeiculo.Focus();
        }
        private void btn_pesquisar_Click(object sender, EventArgs e)
        {
            ckb_exibirPendentes.Checked = ckb_exibirConcluidos.Checked = true;
            int cod = new int();
            Int32.TryParse(txtPesquisar.Text, out cod);
            PopulaGrid(txtPesquisar.Text);
        }
        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void btnBuscarVeiculo_Click(object sender, EventArgs e)
        {
            new frmSelecionarGenerico("Veiculo").ShowDialog();
            txtVeiculoID.Text = BLLUtilitarios.veiculoID.ToString();
            txtVeiculo.Text = BLLUtilitarios.veiculoNome;
            txtveiculoPlaca.Text = BLLUtilitarios.placa;
            dtoCliente = bllCliente.PesquisarDonoVeiculo(BLLUtilitarios.veiculoID);
            txtVeiculoDono.Text = dtoCliente.Nome + " " + dtoCliente.Sobrenome;
        }
        private void btnReziseVeiculo_Click(object sender, EventArgs e)
        {
            if (tlpPrincipal.RowStyles[2].Height == 90)
            {
                tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 280F));
                tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
                tlpDetalhesInterno.Visible = false;
            }
            else
            {
                tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
                tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
                tlpDetalhesInterno.Visible = false;
            }
        }
        private void btnConcluir_Click(object sender, EventArgs e)
        {
            dgvOrdemPendente_CellClick(null, null);

        Retirar:
            bool TodosServicoConcluidos = false;
            bool FuncionarioParaServicos = true ;
            PopularGridServicos();
            for (int i = 0; i < dgvServicos.RowCount; i++)
            {
                if (!(bool)(dgvServicos.Rows[i].Cells["Status"].Value))
                {
                    TodosServicoConcluidos = false;
                    break;
                }
                else
                    TodosServicoConcluidos = true;
            }

            if (TodosServicoConcluidos)
            {
                dgvOrdemPendente_CellClick(null, null);
                dtoOrdemPendente.Descricao = txtDescricao.Text;
                if (!string.IsNullOrWhiteSpace(txtVeiculoID.Text))
                    dtoOrdemPendente.VeiculoID = Int32.Parse(txtVeiculoID.Text);
                dtoOrdemPendente.DataEntrada = dtpDataEntrada.Value;
                dtoOrdemPendente.PrevisaoEntrega = dtpPrevisaoEntrega.Value;
                dtoOrdemPendente.Prioridade = cmbPrioridade.SelectedItem.ToString();
                dtoOrdemPendente.Resumo = txtResumo.Text;
                dtoOrdemPendente.Status = true;
                bllOrdemPendente.Atualizar(dtoOrdemPendente);
                PopulaGrid();
                Habilitar(false);
            }
            else
            {
                if (new frmMessageBox().Show(string.Format("O Veículo de Placa {0} Possui serviços pendentes.\n\n Deseja Marcar todos os serviços como Concluídos?", txtveiculoPlaca.Text), "Serviços Pendentes", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
                {
                    for (int i = 0; i < dgvServicos.RowCount; i++)
                    {

                        int ordemDetalheServicoID =
                        Int32.Parse(dgvServicos["OrdemDetalheServicoID", i].Value.ToString());
                        dtoOrdemDetalheServico = new BLLOrdemDetalheServico().Buscar(ordemDetalheServicoID);

                        dtoOrdemDetalheServico.Status = true;
                        if (!string.IsNullOrWhiteSpace(dgvServicos["Funcionario", i].Value.ToString()))
                        {
                            new BLLOrdemDetalheServico().Atualizar(dtoOrdemDetalheServico);
                            PopularGridServicos();
                        }
                        else
                        {
                            FuncionarioParaServicos = false;
                        }

                    }
                    if (FuncionarioParaServicos)
                        goto Retirar;
                    else
                    {
                        new frmMessageBox().Show("Alguns Serviços não puderam ser Concluídos\n por não terem Funcionário Associado a eles.", "Serviços Pendentes", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        btnEditar_Click(null, null);
                        btnExpandir_Click(null, null);
                    }
                }
            }

        }
        private void btnAddProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            new frmProdutoAdicionar(dtoOrdemPendente.OrdemPendenteID).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();
            timerCarrosNaOficina.Enabled = false;
        }
        private void btnExcluirProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvProdutos.Focus();
            int index = 0;
            if (dgvProdutos.Rows.Count > 0)
            {
                if (dgvProdutos.CurrentCellAddress.Y != -1)
                {
                    DTOProduto dtoproduto = new DTOProduto();
                    index = dgvProdutos.CurrentCellAddress.Y;
                    dtoproduto.ProdutoID = Int32.Parse(dgvProdutos["ID", index].Value.ToString());
                    dtoproduto.Quantidade = Int32.Parse(dgvProdutos["Quantidade", dgvProdutos.CurrentCellAddress.Y].Value.ToString());
                    new BLLProduto().AlterarQuantidade(dtoproduto);
                    new BLLOrdemDetalheProduto().Excluir(Int32.Parse(dgvProdutos["OrdemDetalheProdutoID", dgvProdutos.CurrentCellAddress.Y].Value.ToString()));
                    PopularGridProdutos();
                    PopularGridServicos();
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

                dgvProdutos.Focus();
            }
            timerCarrosNaOficina.Enabled = false;
        }
        private void btnAdiconarServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            new frmServicoAdicionar(dtoOrdemPendente.OrdemPendenteID).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();
            timerCarrosNaOficina.Enabled = false;
        }
        private void btnEditarProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvProdutos_CellClick(null, null);
            new frmProdutoAdicionar(dtoOrdemDetalheProduto).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();

            timerCarrosNaOficina.Enabled = false;

        }
        private void btnEditarServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos_CellClick(null, null);
            if (!dtoOrdemDetalheServico.Status)
            {
                new frmServicoAdicionar(dtoOrdemDetalheServico).ShowDialog();
                PopularGridProdutos();
                PopularGridServicos();
            }
            else
                new frmMessageBox().Show("O serviço já está Concluído e não pode ser Editado");
            timerCarrosNaOficina.Enabled = false;
        }
        private void btnConcluirServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos_CellClick(null, null);
            dtoOrdemDetalheServico.Status = true;
            new BLLOrdemDetalheServico().Atualizar(dtoOrdemDetalheServico);
            PopularGridProdutos();
            PopularGridServicos();
            new frmMessageBox().Show("Servico Concluído", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
            timerCarrosNaOficina.Enabled = false;
        }
        private void btnExcluirServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos.Focus();
            if (dgvServicos.Rows.Count > 0)
            {
                if (dgvServicos.CurrentCellAddress.Y != -1)
                {
                    new BLLOrdemDetalheServico().Excluir(Int32.Parse(dgvServicos["OrdemDetalheServicoID", dgvServicos.CurrentCellAddress.Y].Value.ToString()));
                    PopularGridProdutos();
                    PopularGridServicos();
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

                dgvServicos.Focus();
            }

            timerCarrosNaOficina.Enabled = false;
        }
        private void btnNovo_Click(object sender, EventArgs e)
        {

            tlpPrincipal.RowStyles[2] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 280F));
            tlpPrincipal.RowStyles[3] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
            tlpDetalhesInterno.Visible = false;

            Habilitar(true);
            dtoOrdemPendente = new DTOOrdemPendente();
            Limpar();
            dtoOrdemPendente.OrdemPendenteID = 0;

            btnBuscarVeiculo.Focus();
        }
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Habilitar(false);
            Limpar();
        }
        #endregion

        #region EnabledChanged
        private void btnNovo_EnabledChanged(object sender, EventArgs e)
        {
            if (btnNovo.Enabled)
            {
                btnNovo.BackColor = dtoCorPrincipal.Cor;
                btnNovo.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnNovo.BackColor = dtoCorFundo.Cor;

        }
        private void btnEditar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditar.Enabled)
            {
                btnEditar.BackColor = dtoCorPrincipal.Cor;
                btnEditar.ForeColor = dtoCorLetra.Cor;

            }
            else
                btnEditar.BackColor = dtoCorFundo.Cor;
        }
        private void btnCancelar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnCancelar.Enabled)
            {
                btnCancelar.BackColor = dtoCorPrincipal.Cor;

                btnCancelar.ForeColor = dtoCorLetra.Cor;

            }
            else
                btnCancelar.BackColor = dtoCorFundo.Cor;
        }
        private void btnRetirar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnRetirar.Enabled)
            {
                btnRetirar.BackColor = dtoCorPrincipal.Cor;
                btnRetirar.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnRetirar.BackColor = dtoCorFundo.Cor;

        }
        private void btnSalvar_EnabledChanged(object sender, EventArgs e)
        {
            if (btnSalvar.Enabled)
            {
                btnSalvar.BackColor = dtoCorPrincipal.Cor;
                btnSalvar.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnSalvar.BackColor = dtoCorFundo.Cor;
        }
        private void btnExpandir_EnabledChanged(object sender, EventArgs e)
        {

            if (btnExpandir.Enabled)
            {
                if (dtoOrdemPendente.OrdemPendenteID == 0)
                    btnExpandir.Enabled = false;
                else
                {
                    btnExpandir.BackColor = dtoCorPrincipal.Cor;
                    btnExpandir.ForeColor = dtoCorLetra.Cor;
                }
            }
            else
                btnExpandir.BackColor = dtoCorFundo.Cor;

        }
        private void btnAddProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnAddProduto.Enabled)
            {
                btnAddProduto.BackColor = dtoCorPrincipal.Cor;
                btnAddProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnAddProduto.BackColor = dtoCorFundo.Cor;

        }
        private void btnEditarProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditarProduto.Enabled)
            {
                btnEditarProduto.BackColor = dtoCorPrincipal.Cor;
                btnEditarProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnEditarProduto.BackColor = dtoCorFundo.Cor;

        }
        private void btnExcluirProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnExcluirProduto.Enabled)
            {
                btnExcluirProduto.BackColor = dtoCorPrincipal.Cor;
                btnExcluirProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnExcluirProduto.BackColor = dtoCorFundo.Cor;

        }
        private void btnAdiconarServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnAdiconarServico.Enabled)
            {
                btnAdiconarServico.BackColor = dtoCorPrincipal.Cor;
                btnAdiconarServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnAdiconarServico.BackColor = dtoCorFundo.Cor;

        }
        private void btnEditarServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditarServico.Enabled)
            {
                btnEditarServico.BackColor = dtoCorPrincipal.Cor;
                btnEditarServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnEditarServico.BackColor = dtoCorFundo.Cor;

        }
        private void btnExcluirServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnExcluirServico.Enabled)
            {
                btnExcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnExcluirServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnExcluirServico.BackColor = dtoCorFundo.Cor;

        }
        private void btnConcluirServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnConcluirServico.Enabled)
            {
                btnConcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnConcluirServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnConcluirServico.BackColor = dtoCorFundo.Cor;

        }
        private void btnConcluir_EnabledChanged(object sender, EventArgs e)
        {
            if (btnConcluir.Enabled)
            {
                btnConcluir.BackColor = dtoCorPrincipal.Cor;
                btnConcluir.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnConcluir.BackColor = dtoCorFundo.Cor;

        }
        private void btnBuscarVeiculo_EnabledChanged(object sender, EventArgs e)
        {
            if (btnBuscarVeiculo.Enabled)
            {
                btnBuscarVeiculo.BackColor = dtoCorPrincipal.Cor;
                btnBuscarVeiculo.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnBuscarVeiculo.BackColor = dtoCorFundo.Cor;
        }

        #endregion

        #region Mouse Enter
        private void btnEditarkkkkkkk(object sender, EventArgs e)
        {
            btnEditar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnEditar.ForeColor = Color.Black;
            this.btnEditar.BackgroundImage = ((System.Drawing.Image)(null));
        }
        private void btnCancelarkkkkkkk(object sender, EventArgs e)
        {
            btnCancelar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnCancelar.ForeColor = Color.Black;
            this.btnCancelar.BackgroundImage = ((System.Drawing.Image)(null));
        }
        private void btnRetirarkkkkkkk(object sender, EventArgs e)
        {
            btnRetirar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnRetirar.ForeColor = Color.Black;

        }
        private void btnSalvarkkkkkkk(object sender, EventArgs e)
        {
            btnSalvar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnSalvar.ForeColor = Color.Black;
        }
        private void btnNovokkkkkkk(object sender, EventArgs e)
        {
            btnNovo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnNovo.ForeColor = Color.Black;
        }
        private void btnConcluirServicokkkkkkk(object sender, EventArgs e)
        {
            btnConcluirServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnConcluirServico.ForeColor = Color.Black;

        }
        private void btnExcluirServicokkkkkkk(object sender, EventArgs e)
        {
            btnExcluirServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnExcluirServico.ForeColor = Color.Black;

        }
        private void btnEditarServicokkkkkkk(object sender, EventArgs e)
        {
            btnEditarServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnEditarServico.ForeColor = Color.Black;

        }
        private void btnAdiconarServicokkkkkkk(object sender, EventArgs e)
        {
            btnAdiconarServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnAdiconarServico.ForeColor = Color.Black;

        }
        private void btnExcluirProdutokkkkkkk(object sender, EventArgs e)
        {
            btnExcluirProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnExcluirProduto.ForeColor = Color.Black;

        }
        private void btnEditarProdutokkkkkkk(object sender, EventArgs e)
        {
            btnEditarProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnEditarProduto.ForeColor = Color.Black;

        }
        private void btnAddProdutokkkkkkk(object sender, EventArgs e)
        {
            btnAddProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnAddProduto.ForeColor = Color.Black;

        }
        private void btnReziseVeiculokkkkkkk(object sender, EventArgs e)
        {
            btnReziseVeiculo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnReziseVeiculo.ForeColor = Color.Black;
        }
        private void btnConcluirServicokkkkkkk_1(object sender, EventArgs e)
        {
            btnConcluirServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnConcluirServico.ForeColor = Color.Black;
        }
        private void btn_pesquisarkkkkkkk(object sender, EventArgs e)
        {

            btn_pesquisar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btn_pesquisar.ForeColor = Color.Black;
        }
        private void btnExpandirkkkkkkk(object sender, EventArgs e)
        {

            btnExpandir.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnExpandir.ForeColor = Color.Black;
        }
        private void btnConcluirkkkkkkk(object sender, EventArgs e)
        {
            btnConcluir.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnConcluir.ForeColor = Color.Black;
            this.btnConcluir.BackgroundImage = ((System.Drawing.Image)(null));
        }
        private void btnBuscarVeiculokkkkkkk(object sender, EventArgs e)
        {
            btnBuscarVeiculo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnBuscarVeiculo.ForeColor = Color.Black;
            this.btnBuscarVeiculo.BackgroundImage = ((System.Drawing.Image)(null));
        }
        #endregion

        #region Mouse Leave
        private void btnEditar_MouseLeave(object sender, EventArgs e)
        {
            if (btnEditar.Enabled)
            {
                btnEditar.BackColor = dtoCorPrincipal.Cor;
                btnEditar.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnCancelar_MouseLeave(object sender, EventArgs e)
        {
            if (btnCancelar.Enabled)
            {
                btnCancelar.BackColor = dtoCorPrincipal.Cor;
                btnCancelar.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnRetirar_MouseLeave(object sender, EventArgs e)
        {
            if (btnRetirar.Enabled)
            {
                btnRetirar.BackColor = dtoCorPrincipal.Cor;
                btnRetirar.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnSalvar_MouseLeave(object sender, EventArgs e)
        {
            if (btnSalvar.Enabled)
            {
                btnSalvar.BackColor = dtoCorPrincipal.Cor;
                btnSalvar.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnNovo_MouseLeave(object sender, EventArgs e)
        {
            if (btnNovo.Enabled)
            {
                btnNovo.BackColor = dtoCorPrincipal.Cor;
                btnNovo.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btn_pesquisar_MouseLeave(object sender, EventArgs e)
        {
            if (btn_pesquisar.Enabled)
            {
                btn_pesquisar.BackColor = dtoCorPrincipal.Cor;
                btn_pesquisar.ForeColor = dtoCorLetra.Cor;
            }

        }
        private void btnExpandir_MouseLeave(object sender, EventArgs e)
        {
            if (btnExpandir.Enabled)
            {
                btnExpandir.BackColor = dtoCorPrincipal.Cor;
                btnExpandir.ForeColor = dtoCorLetra.Cor;
            }

        }
        private void btnReziseVeiculo_MouseLeave(object sender, EventArgs e)
        {
            if (btnReziseVeiculo.Enabled)
            {
                btnReziseVeiculo.BackColor = dtoCorPrincipal.Cor;
                btnReziseVeiculo.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnAddProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnAddProduto.Enabled)
            {
                btnAddProduto.BackColor = dtoCorPrincipal.Cor;
                btnAddProduto.ForeColor = dtoCorLetra.Cor;
            }

        }
        private void btnEditarProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnEditarProduto.Enabled)
            {
                btnEditarProduto.BackColor = dtoCorPrincipal.Cor;
                btnEditarProduto.ForeColor = dtoCorLetra.Cor;
            }

        }
        private void btnExcluirProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnExcluirProduto.Enabled)
            {
                btnExcluirProduto.BackColor = dtoCorPrincipal.Cor;
                btnExcluirProduto.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnAdiconarServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnAdiconarServico.Enabled)
            {
                btnAdiconarServico.BackColor = dtoCorPrincipal.Cor;
                btnAdiconarServico.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnEditarServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnEditarServico.Enabled)
            {
                btnEditarServico.BackColor = dtoCorPrincipal.Cor;
                btnEditarServico.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnExcluirServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnExcluirServico.Enabled)
            {
                btnExcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnExcluirServico.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnConcluirServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnConcluirServico.Enabled)
            {
                btnConcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnConcluirServico.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnConcluir_MouseLeave(object sender, EventArgs e)
        {
            if (btnConcluir.Enabled)
            {
                btnConcluir.BackColor = dtoCorPrincipal.Cor;
                btnConcluir.ForeColor = dtoCorLetra.Cor;
            }
        }
        private void btnBuscarVeiculo_MouseLeave(object sender, EventArgs e)
        {
            if (btnBuscarVeiculo.Enabled)
            {
                btnBuscarVeiculo.BackColor = dtoCorPrincipal.Cor;
                btnBuscarVeiculo.ForeColor = dtoCorLetra.Cor;
            }
        }
        #endregion

        #region Grid
        private void dgvOrdemPendente_DataSourceChanged(object sender, EventArgs e)
        {
            if (dgvOrdemPendente.Rows.Count == 1)
                dgvOrdemPendente_CellClick(null, null);

            if (dgvOrdemPendente.Rows.Count == 0)
                Limpar();

            if (dgvOrdemPendente.Rows.Count <= 0)
            {
                btnEditar.Enabled = false;
                btnRetirar.Enabled = false;
                btnConcluir.Enabled = false;
            }
            else
            {
                btnEditar.Enabled = true;
                btnRetirar.Enabled = true;
                btnConcluir.Enabled = true;
            }

        }
        private void dgvOrdemPendente_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvOrdemPendente.CurrentCellAddress.X != -1 && dgvOrdemPendente.CurrentCellAddress.Y != -1)
            {
                Limpar();
                dtoOrdemPendente.OrdemPendenteID = Int32.Parse(dgvOrdemPendente.Rows[dgvOrdemPendente.CurrentCellAddress.Y].Cells["ID"].Value.ToString());
                gpbVeiculo.Text = "Ordem Nº: " + dtoOrdemPendente.OrdemPendenteID;
                dtoOrdemPendente = bllOrdemPendente.PesquisarOrdemPendente(dtoOrdemPendente.OrdemPendenteID);
                dtpDataEntrada.Value = dtoOrdemPendente.DataEntrada.Date;
                dtpPrevisaoEntrega.Value = dtoOrdemPendente.PrevisaoEntrega.Date;
                txtResumo.Text = dtoOrdemPendente.Resumo;
                txtDescricao.Text = dtoOrdemPendente.Descricao;
                cmbPrioridade.SelectedItem = dtoOrdemPendente.Prioridade;
                txtVeiculoID.Text = dtoOrdemPendente.VeiculoID.ToString();
                DTOVeiculo dtoVeiculo = new BLLVeiculo().PesquisarVeiculosID(dtoOrdemPendente.VeiculoID);
                txtveiculoPlaca.Text = dtoVeiculo.Placa;
                txtVeiculo.Text = dtoVeiculo.Marca + " " + dtoVeiculo.Modelo;
                DTOCliente dtocliente = bllCliente.PesquisarDonoVeiculo(dtoOrdemPendente.VeiculoID);
                txtVeiculoDono.Text = dtocliente.Nome + " " + dtocliente.Sobrenome;
                Habilitar(false);
                btnEditar.Enabled = true;
                PopularGridProdutos();
                PopularGridServicos();
            }
        }
        private void dgvOrdemPendente_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Habilitar(true);
            btnBuscarVeiculo.Focus();
        }
        private void dgvProdutos_DataSourceChanged(object sender, EventArgs e)
        {
            if (dgvProdutos.RowCount > 0)
            {
                dgvProdutos.ColumnHeadersVisible = true;
                btnEditarProduto.Enabled = true;
                btnExcluirProduto.Enabled = true;
            }
            else
            {
                dgvProdutos.ColumnHeadersVisible = false;
                btnEditarProduto.Enabled = false;
                btnExcluirProduto.Enabled = false;
            }
        }
        private void dgvServicos_DataSourceChanged(object sender, EventArgs e)
        {
            if (dgvServicos.RowCount > 0)
            {
                btnConcluirServico.Enabled = true;
                btnEditarServico.Enabled = true;
                btnExcluirServico.Enabled = true;
            }
            else
            {
                btnConcluirServico.Enabled = false;
                btnEditarServico.Enabled = false;
                btnExcluirServico.Enabled = false;
            }
        }
        private void dgvProdutos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvProdutos.Rows.Count > 0)
            {
                if (dgvProdutos.CurrentCellAddress.Y != -1)
                {
                    int ordemDetalheProdutoID =
                    Int32.Parse(dgvProdutos["OrdemDetalheProdutoID", dgvProdutos.CurrentCellAddress.Y].Value.ToString());
                    dtoOrdemDetalheProduto = new BLLOrdemDetalheProduto().Buscar(ordemDetalheProdutoID);
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

            }

        }
        private void dgvServicos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvServicos.Rows.Count > 0)
            {
                if (dgvServicos.CurrentCellAddress.Y != -1)
                {
                    int ordemDetalheServicoID =
                    Int32.Parse(dgvServicos["OrdemDetalheServicoID", dgvServicos.CurrentCellAddress.Y].Value.ToString());
                    dtoOrdemDetalheServico = new BLLOrdemDetalheServico().Buscar(ordemDetalheServicoID);
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

            }
        }
        #endregion

        #region Outros
        private void timer_Tick(object sender, EventArgs e)
        {
            PopularGridProdutos();
            PopularGridServicos();
        }
        private void ckb_exibirConcluidos_CheckedChanged(object sender, EventArgs e)
        {
            PopulaGrid();
        }
        private void ckb_exibirPendentes_CheckedChanged(object sender, EventArgs e)
        {
            PopulaGrid();
        }
        private void txtPesquisar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btn_pesquisar_Click(null, null);
        }
        private void gpbVeiculo_TabIndexChanged(object sender, EventArgs e)
        {
            if (gpbVeiculo.Text == "Ordem")
                btnExpandir.Enabled = false;
            else
                btnExpandir.Enabled = true;
        }
        #endregion

        #endregion
    }
}